<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Maven  &middot; sitename</title>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">


<meta name="description" content="Maven description" />

<meta name="keywords" content="three, four, ">


<meta property="og:title" content="Maven  &middot; sitename ">
<meta property="og:site_name" content="sitename"/>
<meta property="og:url" content="https://lvzongcheng.gitee.io/tool/maven/" />
<meta property="og:locale" content="en-EN">


<meta property="og:type" content="article" />
<meta property="og:description" content="Maven description"/>
<meta property="og:article:published_time" content="2017-12-14T00:00:00Z" />
<meta property="og:article:modified_time" content="2017-12-14T00:00:00Z" />

  
    
<meta property="og:article:tag" content="three">
    
<meta property="og:article:tag" content="four">
    
  

  

<script type="application/ld+json">
  {
    "@context": "http://schema.org",
    "@type": "Article",
    "headline": "Maven",
    "author": {
      "@type": "Person",
      "name": "LvZongCheng"
    },
    "datePublished": "2017-12-14",
    "description": "Maven description",
    "wordCount":  854 
  }
</script>



<link rel="canonical" href="https://lvzongcheng.gitee.io/tool/maven/" />

<link rel="apple-touch-icon-precomposed" sizes="144x144" href="https://lvzongcheng.gitee.io/touch-icon-144-precomposed.png">
<link href="https://lvzongcheng.gitee.io/favicon.png" rel="icon">

<meta name="generator" content="Hugo 0.60.0" />

  <!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

<link href='https://fonts.googleapis.com/css?family=Merriweather:300%7CRaleway%7COpen+Sans' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/highlight/default.css">

  
  
	<script>
	  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
	  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

	  ga('create', 'Your Google Analytics tracking code', 'auto');
	  ga('send', 'pageview');

	</script>

</head>
<body>
  <main id="main-wrapper" class="container main_wrapper has-sidebar">
    <header id="main-header" class="container main_header">
  <div class="container brand">
  <div class="container title h1-like">
  <a class="baselink" href="https://lvzongcheng.gitee.io">
  LvZongCheng

</a>

</div>

  
<div class="container topline">
  
  淡定 执著 进取 自律


</div>


</div>

  <nav class="container nav primary no-print">
  

<a class="homelink" href="https://lvzongcheng.gitee.io">home</a>


  
<a href="https://lvzongcheng.gitee.io/framework" title="Show list of Frameworks">Frameworks</a>

<a href="https://lvzongcheng.gitee.io/java" title="Show list of Java">Java</a>

<a href="https://lvzongcheng.gitee.io/linux" title="Show list of Linux">Linux</a>

<a href="https://lvzongcheng.gitee.io/redis" title="Show list of Redis">Redis</a>

<a href="https://lvzongcheng.gitee.io/sql" title="Show list of SQL">SQL</a>

<a href="https://lvzongcheng.gitee.io/Spring" title="Show list of Spring">Spring</a>

<a href="https://lvzongcheng.gitee.io/tool" title="Show list of Tools">Tools</a>

<a href="https://lvzongcheng.gitee.io/webpage" title="Show list of WebPage">WebPage</a>

<a href="https://lvzongcheng.gitee.io/information" title="Show list of information">information</a>

<a href="https://lvzongcheng.gitee.io/network" title="Show list of network">network</a>

<a href="https://lvzongcheng.gitee.io/%E5%BE%AE%E6%9C%8D%E5%8A%A1" title="Show list of 微服务">微服务</a>

<a href="https://lvzongcheng.gitee.io/%E6%80%BB%E7%BB%93" title="Show list of 总结">总结</a>

<a href="https://lvzongcheng.gitee.io/%E6%9C%BA%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96" title="Show list of 机器自动化">机器自动化</a>

<a href="https://lvzongcheng.gitee.io/%E6%B1%87%E7%BC%96" title="Show list of 汇编">汇编</a>

<a href="https://lvzongcheng.gitee.io/%E8%AE%B0%E4%BA%8B%E6%9C%AC" title="Show list of 记事本">记事本</a>


</nav>

<div class="container nav secondary no-print">
  
<a id="contact-link-email" class="contact_link" rel="me" aria-label="Email" href="mailto:Lyc19880405@163.com">
  <span class="fa fa-envelope-square"></span></a>



<a id="contact-link-github" class="contact_link" rel="me" aria-label="Github" href="https://github.com/enten/hugo-boilerplate">
  <span class="fa fa-github-square"></span></a>




 


















</div>


  

</header>


<article id="main-content" class="container main_content single">
  <header class="container hat">
  <h1>Maven
</h1>

</header>

  <div class="container content">
  <p>Alt+/  提示<br>
没连网需要提示 关联 《maven-版本号.xsd文件》</p>
<h4 id="pom-jar">pom jar安装</h4>
<p>示例
将此jar安装到本地仓库</p>
<pre><code>		&lt;dependency&gt;
			&lt;groupId&gt;com.huawei.hwclouds.ais&lt;/groupId&gt;
			&lt;artifactId&gt;ais-java-client&lt;/artifactId&gt;
			&lt;version&gt;2.0.0&lt;/version&gt;
		&lt;/dependency&gt;
</code></pre><p>安装命令</p>
<pre><code>mvn install:install-file -Dfile='E:/jar/ais-java-client-2.0.0.jar'  -DgroupId='com.huawei.hwclouds.ais' -DartifactId=ais-java-client -Dversion='2.0.0' -Dpackaging=jar
</code></pre><h6 id="heading">注意事项</h6>
<p>1.带点的需要用单引号
2.在jar存放本地路径需要用单引号</p>
<h4 id="pom">pom文件文件</h4>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;project</span> <span style="color:#a6e22e">xmlns=</span><span style="color:#e6db74">&#34;http://maven.apache.org/POM/4.0.0&#34;</span> <span style="color:#a6e22e">xmlns:xsi=</span><span style="color:#e6db74">&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span> <span style="color:#a6e22e">xsi:schemaLocation=</span><span style="color:#e6db74">&#34;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&#34;</span><span style="color:#f92672">&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 版本：4.0.0 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#f92672">&lt;modelVersion</span><span style="color:#f92672">&gt;</span>4.0.0<span style="color:#f92672">&lt;/modelVersion&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 组织名称：暂时使用 组织名称+项目名称 作为组织名称 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 组织名称：实际名称 按照访问路径规范设置，通常以功能作为名称：eg: junit spring </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>cn.itcast.maven<span style="color:#f92672">&lt;/groupId&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 项目名称 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>HelloWorld<span style="color:#f92672">&lt;/artifactId&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 当前项目版本号：同一个项目开发过程中可以发布多个版本，此处标示0.0.1版 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 当前项目版本号：每个工程发布后可以发布多个版本，依赖时调取不同的版本，使用不同的版本号 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>0.0.1<span style="color:#f92672">&lt;/version&gt;</span>
	  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 发布的包的类型 :默认jar包</span><span style="color:#75715e">--&gt;</span>
	<span style="color:#f92672">&lt;packaging</span><span style="color:#f92672">&gt;</span>jar<span style="color:#f92672">&lt;/packaging&gt;</span>
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 名称：可省略 </span><span style="color:#75715e">--&gt;</span>
  <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>Hello<span style="color:#f92672">&lt;/name&gt;</span>
  
  <span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖关系 </span><span style="color:#75715e">--&gt;</span>
	<span style="color:#f92672">&lt;dependencies</span><span style="color:#f92672">&gt;</span>
		<span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖设置 </span><span style="color:#75715e">--&gt;</span>
		<span style="color:#f92672">&lt;dependency</span><span style="color:#f92672">&gt;</span>
			<span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖组织名称 </span><span style="color:#75715e">--&gt;</span>
			<span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/groupId&gt;</span>
			<span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖项目名称 </span><span style="color:#75715e">--&gt;</span>
			<span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/artifactId&gt;</span>
			<span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖版本名称 </span><span style="color:#75715e">--&gt;</span>
			<span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>4.9<span style="color:#f92672">&lt;/version&gt;</span>
			<span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 依赖范围：test包下依赖该设置 </span><span style="color:#75715e">--&gt;</span>
			<span style="color:#f92672">&lt;scope</span><span style="color:#f92672">&gt;</span>test<span style="color:#f92672">&lt;/scope&gt;</span>
		<span style="color:#f92672">&lt;/dependency&gt;</span>		
		
	<span style="color:#f92672">&lt;/dependencies&gt;</span>
<span style="color:#f92672">&lt;/project&gt;</span>
</code></pre></div><hr>
<h4 id="heading1">常用命令（一）</h4>
<ul>
<li>
<p>a)打开cmd命令行，进入Hello项目根目录(包含有pom.xml文件的目录)</p>
</li>
<li>
<p>b)执行 mvn compile命令
执行完毕后，生成了maven工程编译完成后字节码文件的生成目录target</p>
</li>
<li>
<p>c)cmd 中继续录入mvn clean命令
执行完毕后，字节码生成目录被删除</p>
</li>
<li>
<p>d)cmd 中录入 mvn clean test命令
执行完毕后，字节码生成目录中生成了被测试类与测试类的编译字节码和测试执行过程日志与详细报告</p>
</li>
<li>
<p>e)cmd 中录入 mvn clean compile命令
组合指令，先执行clean，再执行compile，通常应用于上线前执行，清除测试类</p>
</li>
<li>
<p>f)cmd 中录入 mvn clean test命令
组合指令，先执行clean，再执行test，通常应用于测试环节</p>
</li>
<li>
<p>g)cmd 中录入 mvn clean package命令<br>
组合指令，先执行clean，再执行package，将项目打包，通常应用于发布前</p>
<h6 id="maven-">maven 常用命令（二）</h6>
</li>
<li>
<p>mvn archetype：create 创建Maven项目</p>
</li>
<li>
<p>mvn compile 编译源代码</p>
</li>
<li>
<p>mvn deploy 发布项目（项目打包上传至远程仓库）</p>
</li>
<li>
<p>mvn test-compile 编译测试源代码</p>
</li>
<li>
<p>mvn test 运行应用程序中的单元测试</p>
</li>
<li>
<p>mvn site 生成项目相关信息的网站</p>
</li>
<li>
<p>mvn clean 清除项目目录中的生成结果</p>
</li>
<li>
<p>mvn package 根据项目生成的jar</p>
</li>
<li>
<p>mvn install 在本地Repository中安装jar</p>
</li>
<li>
<p>mvn eclipse:eclipse 生成eclipse项目文件</p>
</li>
<li>
<p>mvnjetty:run 启动jetty服务</p>
</li>
<li>
<p>mvntomcat:run 启动tomcat服务</p>
</li>
<li>
<p>mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包，跳过测试类</p>
</li>
</ul>
<h6 id="heading2">执行过程：</h6>
<pre><code>    清理————清空环境  
    编译————编译源码  
    测试————测试源码  
    打包————将编译的非测试类打包  
</code></pre>
<ul>
<li>h)cmd 中录入 mvn clean install 查看仓库，当前项目被发布到本地仓库中
组合指令，先执行clean，再执行install，将项目打包，通常应用于发布前</li>
</ul>
<h6 id="heading3">执行过程：</h6>
<pre><code>    清理————清空环境  
    编译————编译源码  
    测试————测试源码  
    打包————将编译的非测试类打包  
    部署————将打好的包发布到资源仓库中  
</code></pre>
<hr>
<h2 id="--targetsurefirereports">测试结果查看  target&ndash;&gt;surefire-reports</h2>
<h4 id="heading4">断言</h4>
<p>判断运行结果是否正确，需要使用断言。
使用运行的真实值与预计值进行比对
Assert.assertEquals(&ldquo;预计值&rdquo;,真实值);</p>
<hr>
<h2 id="heading5">总结</h2>
<p><a href="http://maven.apache.org/ref/3.0.3/maven-model/maven.html#class_parent">Maven 官方pom文件说明路径</a></p>
<h6 id="heading6">配置环境变量</h6>
<pre><code>MAVEN_HOME : F:\Java\soft\apache-maven-3.2.5
MAVEN : %MAVEN_HOME%\bin
MAVEN_OPTS : -Xms256m -Xmx512m  (配置Maven的运行内存)

path加上 %MAVEN%;
</code></pre>
<p>在命令行上输入 ： mvn -version;  以下信息表示安装成功</p>
<h3 id="pom-">pom 文件配置说明</h3>
<p>使用mvn help:effective-pom，可以打印当前pom与超级pom的合并xml信息</p>
<h4 id="maven">maven进阶：一个多模块项目</h4>
<p>一个多模块项目通过一个父POM 引用一个或多个子模块来定义。父项目，通过以下配置，将子项目关联。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;packaging</span><span style="color:#f92672">&gt;</span>pom<span style="color:#f92672">&lt;/packaging&gt;</span>  
<span style="color:#f92672">&lt;modules</span><span style="color:#f92672">&gt;</span>  
          <span style="color:#f92672">&lt;module</span><span style="color:#f92672">&gt;</span>simple-weather<span style="color:#f92672">&lt;/module&gt;</span>  
         <span style="color:#f92672">&lt;module</span><span style="color:#f92672">&gt;</span>simple-webapp<span style="color:#f92672">&lt;/module&gt;</span>  
<span style="color:#f92672">&lt;/modules&gt;</span> 
</code></pre></div><p>说明：</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;modules</span><span style="color:#f92672">&gt;</span>
	<span style="color:#f92672">&lt;modules</span><span style="color:#f92672">&gt;</span>子项目工程名称<span style="color:#f92672">&lt;/module&gt;</span>
<span style="color:#f92672">&lt;/modules&gt;</span>
</code></pre></div><p>其中值得注意的是<!-- raw HTML omitted -->pom<!-- raw HTML omitted -->这个父项目不像之前的项目那样创建一个JAR 或者一个WAR，它仅
仅是一个引用其它Maven 项目的POM。pom.xml 中下一部分列出了项目的子模块。这些模块在modules元素中定义，
每个modules 元素对应了一个simple-parent/目录下的子目录。Maven知道去这些子目录寻找pom.xml 文件，并且，
在构建的simp-parent 的时候，它会将这些子模块包含到要构建的项目中。</p>
<pre><code> 当然，仅仅在父项目，配置子项目是不能够真正实现关联的，因为，这毕竟需要子项目的同意，故！子项目中需要配置：
</code></pre>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;parent</span><span style="color:#f92672">&gt;</span>  
        <span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>org.sonatype.mavenbook.ch06<span style="color:#f92672">&lt;/groupId&gt;</span>  
        <span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>simple-parent<span style="color:#f92672">&lt;/artifactId&gt;</span>  
        <span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>1.0<span style="color:#f92672">&lt;/version&gt;</span>  
<span style="color:#f92672">&lt;/parent&gt;</span>
</code></pre></div><p>现在，通过父pom.xml将2个子项目进行了关联，那么我们需要从simple-parent 项目运行mvn clean install 命令，将2个
子项目打包，编译为一个项目！</p>
<p>当Maven 执行一个带有子模块的项目的时候，Maven 首先载入父POM，然后定位所有的子模块POM。Maven 然后将所有这些项目的POM放入到一个称为Maven反应堆（Reactor）的东西中，由它负责分析模块之间的依赖关系。这个反应堆处理组件的排序，以确保相互独立的模块能以适当的顺序&raquo;被编译和安装。</p>
<pre><code> 当，通过父pom.xml进行完成多个子项目的关联后，我们可以像前几章一样，分别进入某个单独的模块，进行运行，以移动程序！
</code></pre>
<p>注意：子项目的文件，位于父项目pom.xml同级，也就是，子项目的pom.xml位于父pom.xml的下一级文件中！</p>
<ol start="2">
<li>继承父pom文件</li>
</ol>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;parent</span><span style="color:#f92672">&gt;</span>
	<span style="color:#f92672">&lt;relativePath</span><span style="color:#f92672">&gt;</span><span style="color:#f92672">&lt;/relativePath&gt;</span>
	<span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/groupId&gt;</span>  
  	<span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/artifactId&gt;</span>  
  	<span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>4.4<span style="color:#f92672">&lt;/version&gt;</span> 
<span style="color:#f92672">&lt;/parent&gt;</span>
</code></pre></div><ol start="3">
<li>
<p>引入jar包集合
<!-- raw HTML omitted --></p>
<p>引入单个jar包信息描述</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;dependency</span><span style="color:#f92672">&gt;</span>  
    <span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/groupId&gt;</span>  
    <span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>junit<span style="color:#f92672">&lt;/artifactId&gt;</span>  
    <span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>4.4<span style="color:#f92672">&lt;/version&gt;</span>  
<span style="color:#f92672">&lt;/dependency&gt;</span>
</code></pre></div></li>
</ol>
<!-- raw HTML omitted -->
<p>在Maven的依赖管理中，经常会用到依赖的scope设置。这里整理下各种scope的使用场景和说明，以及在使用中的实践心得。</p>
<h4 id="scope">scope()依赖范围的使用场景和说明</h4>
<ol>
<li>
<p>compile<br>
编译范围，默认scope，在工程环境的classpath（编译环境）和打包（如果是WAR包，会包含在WAR包中）时候都有效。</p>
</li>
<li>
<p>provided<br>
容器或JDK已提供范围，表示该依赖包已经由目标容器（如tomcat）和JDK提供，只在编译的classpath中加载和使用，打包的时候不会包含在目标包中。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包，一般由servlet容器提供，无需在打包到war包中，如果不配置为provided，把这些包打包到工程war包中，在tomcat6以上版本会出现冲突无法正常运行程序（版本不符的情况）。</p>
</li>
<li>
<p>runtime<br>
一般是运行和测试环境使用，编译时候不用加入classpath，打包时候会打包到目标包中。一般是通过动态加载或接口反射加载的情况比较多。也就是说程序只使用了接口，具体的时候可能有多个，运行时通过配置文件或jar包扫描动态加载的情况。典型的包括：JDBC驱动等。</p>
</li>
<li>
<p>test<br>
测试范围，一般是单元测试场景使用，在编译环境加入classpath，但打包时不会加入，如junit等。</p>
</li>
<li>
<p>system<br>
系统范围，与provided类似，只是标记为该scope的依赖包需要明确指定基于文件系统的jar包路径。因为需要通过systemPath指定本地jar文件路径，所以该scope是不推荐的。如果是基于组织的，一般会建立本地镜像，会把本地的或组织的基础组件加入本地镜像管理，避过使用该scope的情况。</p>
</li>
</ol>
<p>示例：<br>
依赖管理-依赖范围<br>
<img src="/image/maven/Maven20170521_01.png" alt="Alt text"></p>
<h6 id="heading7">实践：</h6>
<p>provided是没有传递性的，也就是说，如果你依赖的某个jar包，它的某个jar的范围是provided，那么该jar不会在你的工程中依靠jar依赖传递加入到你的工程中。<br>
provided具有继承性，上面的情况，如果需要统一配置一个组织的通用的provided依赖，可以使用parent，然后在所有工程中继承。</p>
<h5 id="heading8">依赖配置</h5>
<p>依赖声明主要包含如下元素：</p>
<pre><code>&lt;dependencies&gt;

    &lt;dependency&gt;
        &lt;groupId&gt;junit&lt;/groupId&gt;
        &lt;artifactId&gt;junit&lt;/artifactId&gt;
        &lt;version&gt;4.10&lt;/version&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;	
	
&lt;/dependencies&gt;
</code></pre>
<p>其中依赖范围scope 用来控制依赖和编译，测试，运行的classpath的关系. 主要的是三种依赖关系如下：</p>
<ol>
<li>compile： 默认编译依赖范围。对于编译，测试，运行三种classpath都有效</li>
<li>test：测试依赖范围。只对于测试classpath有效</li>
<li>provided：已提供依赖范围。对于编译，测试的classpath都有效，但对于运行无效。因为由容器已经提供，例如servlet-api</li>
<li>runtime:运行时提供。例如:jdbc驱动</li>
</ol>
<h6 id="heading9">依赖传递</h6>
<p><strong>第一列是直接依赖，第一行是间接依赖</strong>  
<img src="/image/maven/maven20170521_02.png" alt="依赖管理-依赖范围对传递的影响"></p>
<p>传递性依赖原则：<br>
A&ndash;&gt;B<br>
A&ndash;&gt;C</p>
<ol>
<li>路径最近者优先</li>
<li>路径相同，第一声明者优先</li>
</ol>
<p><strong>注意：</strong></p>
<ol>
<li>dependencyManagement中定义的依赖子module不会共享</li>
<li>dependencies中定义的依赖子module可以共享</li>
</ol>
<p>可选依赖不被传递
依赖优化:mvn dependency:list</p>
<h6 id="heading10">依赖管理：传递性依赖和可选依赖,排除依赖</h6>
<h6 id="jar">可选依赖：控制当前工程(jar包)依赖的资源是否向下传递</h6>
<p><!-- raw HTML omitted --> true/false <!-- raw HTML omitted -->是否向下传递<br>
true 不向下传， false 向下传<br>
示例代码：
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->junit<!-- raw HTML omitted -->
<!-- raw HTML omitted -->junit<!-- raw HTML omitted -->
<!-- raw HTML omitted -->4.10<!-- raw HTML omitted -->
<!-- raw HTML omitted --> true/false <!-- raw HTML omitted -->
<!-- raw HTML omitted -->	
<!-- raw HTML omitted --></p>
<h6 id="heading11">排除依赖</h6>
<p>排除依赖：排除依赖基于直接依赖传递过来的间接依赖
<!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted --><!-- raw HTML omitted -->
所包含坐标，排除依赖包中所包含的依赖关系<br>
不需要添加版本，直接类别排除<br>
示例代码：
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->依赖方  <!-- raw HTML omitted -->
<!-- raw HTML omitted -->  <!-- raw HTML omitted -->
<!-- raw HTML omitted -->   <!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->log4j<!-- raw HTML omitted -->
<!-- raw HTML omitted -->log4j<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->	
<!-- raw HTML omitted --></p>
<h6 id="heading12">可选依赖与排除依赖区别</h6>
<p>可选依赖高于排除依赖
可选依赖设置在依赖方，设定引用方是否能引用。
排除依赖设置在本方的，是否使用依赖放的东西。
<strong>理解比喻：可选依赖设置为父类的东西是否让子类继承。可选依赖设置子类是否使用父类东西。</strong></p>
<h6 id="heading13">依赖冲突</h6>
<p>如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖，以直接依赖的版本为准（就近原则）<br>
如果直接依赖中包含有同一个坐标不同版本的资源依赖，以配置顺序下方的版本为准（就近原则）</p>
<hr>
<h4 id="maven-1">maven 仓库</h4>
<pre><code>本地仓库 的更新
    mvn  clean package install
远程 仓库 的更新
    mvn clean package deploy
    工程文件pom.xml的设置
</code></pre>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"> <span style="color:#f92672">&lt;build</span><span style="color:#f92672">&gt;</span>
        <span style="color:#f92672">&lt;pluginManagement</span><span style="color:#f92672">&gt;</span>
            <span style="color:#f92672">&lt;plugins</span><span style="color:#f92672">&gt;</span>
                <span style="color:#f92672">&lt;plugin</span><span style="color:#f92672">&gt;</span>
                    <span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>org.apache.maven .plugins<span style="color:#f92672">&lt;/groupId&gt;</span>
                    <span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>maven -compiler-plugin<span style="color:#f92672">&lt;/artifactId&gt;</span>
                    <span style="color:#f92672">&lt;configuration</span><span style="color:#f92672">&gt;</span>
                        <span style="color:#f92672">&lt;source</span><span style="color:#f92672">&gt;</span>1.5<span style="color:#f92672">&lt;/source&gt;</span>
                        <span style="color:#f92672">&lt;target</span><span style="color:#f92672">&gt;</span>1.5<span style="color:#f92672">&lt;/target&gt;</span>
                    <span style="color:#f92672">&lt;/configuration&gt;</span>
                <span style="color:#f92672">&lt;/plugin&gt;</span>
            <span style="color:#f92672">&lt;/plugins&gt;</span>
        <span style="color:#f92672">&lt;/pluginManagement&gt;</span>
        <span style="color:#f92672">&lt;extensions</span><span style="color:#f92672">&gt;</span>
            <span style="color:#f92672">&lt;extension</span><span style="color:#f92672">&gt;</span>
                <span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>org.apache.maven .wagon<span style="color:#f92672">&lt;/groupId&gt;</span>
                <span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>wagon-ftp<span style="color:#f92672">&lt;/artifactId&gt;</span>
                <span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>1.0-alpha-6<span style="color:#f92672">&lt;/version&gt;</span>
            <span style="color:#f92672">&lt;/extension&gt;</span>
        <span style="color:#f92672">&lt;/extensions&gt;</span>
    <span style="color:#f92672">&lt;/build&gt;</span>

    <span style="color:#f92672">&lt;repositories</span><span style="color:#f92672">&gt;</span>
        <span style="color:#f92672">&lt;repository</span><span style="color:#f92672">&gt;</span>
            <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>cdc-respository<span style="color:#f92672">&lt;/id&gt;</span>
            <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>cdc-respository<span style="color:#f92672">&lt;/name&gt;</span>
            <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://xxx.xxx.xxx.xx:8080/Maven 2Repository<span style="color:#f92672">&lt;/url&gt;</span>
        <span style="color:#f92672">&lt;/repository&gt;</span>
    <span style="color:#f92672">&lt;/repositories&gt;</span>
    <span style="color:#f92672">&lt;pluginRepositories</span><span style="color:#f92672">&gt;</span>
        <span style="color:#f92672">&lt;pluginRepository</span><span style="color:#f92672">&gt;</span>
            <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>cdc-plugin-respository<span style="color:#f92672">&lt;/id&gt;</span>
            <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>cdc-plugin-respository<span style="color:#f92672">&lt;/name&gt;</span>
            <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://xxx.xxx.xxx.xxx:8080/Maven 2Repository<span style="color:#f92672">&lt;/url&gt;</span>
        <span style="color:#f92672">&lt;/pluginRepository&gt;</span>
    <span style="color:#f92672">&lt;/pluginRepositories&gt;</span>

    <span style="color:#f92672">&lt;distributionManagement</span><span style="color:#f92672">&gt;</span>
        <span style="color:#f92672">&lt;repository</span><span style="color:#f92672">&gt;</span>
            <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>my-deploy-respository<span style="color:#f92672">&lt;/id&gt;</span>
            <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>cdc-plugin-respository<span style="color:#f92672">&lt;/name&gt;</span>
            <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>ftp://192.168.2.177/home/mfguser/Maven 2Repository<span style="color:#f92672">&lt;/url&gt;</span>
        <span style="color:#f92672">&lt;/repository&gt;</span>
    <span style="color:#f92672">&lt;/distributionManagement&gt;</span> 
</code></pre></div><pre><code>    本地用户setting.xml文件的设定   /root/.m2/settings.xml
</code></pre>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml">     <span style="color:#f92672">&lt;server</span><span style="color:#f92672">&gt;</span>
      <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>my-deploy-respository<span style="color:#f92672">&lt;/id&gt;</span>
      <span style="color:#f92672">&lt;username</span><span style="color:#f92672">&gt;</span>user<span style="color:#f92672">&lt;/username&gt;</span>
      <span style="color:#f92672">&lt;password</span><span style="color:#f92672">&gt;</span>password<span style="color:#f92672">&lt;/password&gt;</span>
    <span style="color:#f92672">&lt;/server&gt;</span>
</code></pre></div><h6 id="heading14">分发构件至远程仓库</h6>
<p>mvn install 会将项目生成的构件安装到本地Maven仓库，mvn deploy 用来将项目生成的构件分发到
远程Maven仓库。本地Maven仓库的构件只能供当前用户使用，在分发到远程Maven仓库之后，所有能
访问该仓库的用户都能使用你的构件。
我们需要配置POM的distributionManagement来指定Maven分发构件的位置，如下：</p>
<p>本地用户setting.xml文件的设定   /root/.m2/settings.xml</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml">    <span style="color:#f92672">&lt;settings</span><span style="color:#f92672">&gt;</span>    
      ...    
      <span style="color:#f92672">&lt;servers</span><span style="color:#f92672">&gt;</span>    
        <span style="color:#f92672">&lt;server</span><span style="color:#f92672">&gt;</span>    
          <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>nexus-releases<span style="color:#f92672">&lt;/id&gt;</span>    
          <span style="color:#f92672">&lt;username</span><span style="color:#f92672">&gt;</span>admin<span style="color:#f92672">&lt;/username&gt;</span>    
          <span style="color:#f92672">&lt;password</span><span style="color:#f92672">&gt;</span>admin123<span style="color:#f92672">&lt;/password&gt;</span>    
        <span style="color:#f92672">&lt;/server&gt;</span>    
        <span style="color:#f92672">&lt;server</span><span style="color:#f92672">&gt;</span>    
          <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>nexus-snapshots<span style="color:#f92672">&lt;/id&gt;</span>    
          <span style="color:#f92672">&lt;username</span><span style="color:#f92672">&gt;</span>admin<span style="color:#f92672">&lt;/username&gt;</span>    
          <span style="color:#f92672">&lt;password</span><span style="color:#f92672">&gt;</span>admin123<span style="color:#f92672">&lt;/password&gt;</span>    
        <span style="color:#f92672">&lt;/server&gt;</span>      
      <span style="color:#f92672">&lt;/servers&gt;</span>    
      ...    
    <span style="color:#f92672">&lt;/settings&gt;</span>  
</code></pre></div><p>需要注意的是，settings.xml中server元素下id的值必须与POM中repository或snapshotRepository下
id的值完全一致。将认证信息放到settings下而非POM中，是因为POM往往是它人可见的，而settings.xml是本地的。</p>
<hr>
<h4 id="heading15">生命周期</h4>
<p>Maven生命周期就是为了对所有的构建过程进行抽象和统一
包括项目清理，初始化，编译，打包，测试，部署等几乎所有构建步骤
Maven三大生命周期
clean：清理项目的
default：构建项目的
site：生成项目站点的
生命周期Maven有三套相互独立的生命周期，请注意这里说的是“三套”，而且“相互独立”，这三套生命周期分别是：</p>
<p>Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 
Default Lifecycle 构建的核心部分，编译，测试，打包，部署等等。 
Site Lifecycle 生成项目报告，站点，发布站点。 
再次强调一下它们是相互独立的，你可以仅仅调用clean来清理工作目录，仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。</p>
<h6 id="clean">生命周期clean：</h6>
<p>clean生命周期每套生命周期都由一组阶段(Phase)组成，我们平时在命令行输入的命令总会对应于一个特定的阶段。比如，运行mvn clean ，这个的clean是Clean生命周期的一个阶段。有Clean生命周期，也有clean阶段。Clean生命周期一共包含了三个阶段：</p>
<p>pre-clean 执行一些需要在clean之前完成的工作 
clean 移除所有上一次构建生成的文件 
post-clean 执行一些需要在clean之后立刻完成的工作 
mvn clean 中的clean就是上面的clean，在一个生命周期中，运行某个阶段的时候，它之前的所有阶段都会被运行，也就是说，mvn clean 等同于 mvn pre-clean clean ，如果我们运行 mvn post-clean ，那么 pre-clean，clean 都会被运行。这是Maven很重要的一个规则，可以大大简化命令行的输入。</p>
<h6 id="default">生命周期default：</h6>
<p>Default生命周期Default生命周期是Maven生命周期中最重要的一个，绝大部分工作都发生在这个生命周期中。这里，只解释一些比较重要和常用的阶段：<br>
validate<br>
generate-sources<br>
process-sources<br>
generate-resources<br>
process-resources 复制并处理资源文件，至目标目录，准备打包。<br>
compile 编译项目的源代码。 
process-classes<br>
generate-test-sources<br>
process-test-sources<br>
generate-test-resources<br>
process-test-resources 复制并处理资源文件，至目标测试目录。<br>
test-compile 编译测试源代码。<br>
process-test-classes<br>
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。<br>
prepare-package<br>
package 接受编译好的代码，打包成可发布的格式，如 JAR 。<br>
pre-integration-test<br>
integration-test<br>
post-integration-test<br>
verify<br>
install 将包安装至本地仓库，以让其它项目依赖。<br>
deploy 将最终的包复制到远程的仓库，以让其它开发人员与项目共享。<br>
运行任何一个阶段的时候，它前面的所有阶段都会被运行，这也就是为什么我们运行mvn install  的时候，代码会被编译，测试，打包。此外，Maven的插件机制是完全依赖Maven的生命周期的，因此理解生命周期至关重要。</p>
<h6 id="site">生命周期site：</h6>
<p>Site生命周期pre-site 执行一些需要在生成站点文档之前完成的工作 
site 生成项目的站点文档 
post-site 执行一些需要在生成站点文档之后完成的工作，并且为部署做准备 
site-deploy 将生成的站点文档部署到特定的服务器上 
这里经常用到的是site阶段和site-deploy阶段，用以生成和发布Maven站点，这可是Maven相当强大的功能，Manager比较喜欢，文档及统计数据自动生成，很好看。</p>
<h6 id="heading16">插件目标</h6>
<p>Maven的核心仅仅定义了抽象的生命周期，具体的任务都是交由插件完成的
每个插件都能实现多个功能，每个功能就是一个插件目标
Maven的生命周期与插件目标相互绑定，以完成某个具体的构建任务
例如compile就是插件maven-compiler-plugin的一个插件目标</p>
<hr>
<h4 id="heading17">继承</h4>
<p>继承为了消除重复，我们把很多相同的配置提取出来<br>
例如：grouptId，version等<br>
父工程设置为被继承<br>
<!-- raw HTML omitted -->pom<!-- raw HTML omitted -->
子工程继承父工程<br>
省略父工程中定义的坐标除访问名称中的所有设定，添加继承父工程</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;parent</span><span style="color:#f92672">&gt;</span>
	<span style="color:#f92672">&lt;groupId</span><span style="color:#f92672">&gt;</span>…<span style="color:#f92672">&lt;/groupId&gt;</span>
	<span style="color:#f92672">&lt;artifactId</span><span style="color:#f92672">&gt;</span>… <span style="color:#f92672">&lt;/artifactId&gt;</span>
	<span style="color:#f92672">&lt;version</span><span style="color:#f92672">&gt;</span>… <span style="color:#f92672">&lt;/version&gt;</span>
	<span style="color:#f92672">&lt;relativePath</span><span style="color:#f92672">&gt;</span>../父工程项目名<span style="color:#f92672">&lt;/relativePath&gt;</span>
<span style="color:#f92672">&lt;/parent&gt;</span>
</code></pre></div><p>父工程统一管理子工程依赖版本</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;dependencyManagement</span><span style="color:#f92672">&gt;</span>	
	<span style="color:#f92672">&lt;dependencies</span><span style="color:#f92672">&gt;</span>
		//添加公共依赖包
	<span style="color:#f92672">&lt;/dependencies&gt;</span>
<span style="color:#f92672">&lt;/dependencyManagement&gt;</span>
</code></pre></div><p>子工程仅仅添加依赖包，无需添加版本，版本由父工程继承而来
<code>可变版本号配置</code>  
为了进一步便于管理，将所有的版本管理设置在一起，设置为系统属性值</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;properties</span><span style="color:#f92672">&gt;</span>
	<span style="color:#f92672">&lt;junit.version</span><span style="color:#f92672">&gt;</span>4.9<span style="color:#f92672">&lt;/junit.version&gt;</span>
	……
<span style="color:#f92672">&lt;/properties&gt;</span>
</code></pre></div><p>引用使用${junit.version}格式进行，<code>只能在依赖范围设置</code>
父工程统一管理子工程依赖关系
如果所有子工程都需要依赖某些包，父工程可以通过设置依赖，将依赖关系传递到子工程中</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;dependencies</span><span style="color:#f92672">&gt;</span>
	//添加公共依赖包
<span style="color:#f92672">&lt;/dependencies&gt;</span>
</code></pre></div><hr>
<h4 id="heading18">聚合</h4>
<p>如果我们想一次构建多个项目模块，那我们就需要对多个项目模块进行聚合</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#75715e">&lt;!--</span><span style="color:#75715e"> 聚合的目标是为了快速构建</span><span style="color:#75715e">--&gt;</span>
<span style="color:#f92672">&lt;modules</span><span style="color:#f92672">&gt;</span>
			<span style="color:#f92672">&lt;module</span><span style="color:#f92672">&gt;</span>../子项目名称1<span style="color:#f92672">&lt;/module&gt;</span>
			<span style="color:#f92672">&lt;module</span><span style="color:#f92672">&gt;</span>../子项目名称2<span style="color:#f92672">&lt;/module&gt;</span>
			<span style="color:#f92672">&lt;module</span><span style="color:#f92672">&gt;</span>../子项目名称3<span style="color:#f92672">&lt;/module&gt;</span>
<span style="color:#f92672">&lt;/modules&gt;</span>
</code></pre></div><h6 id="heading19">聚合与继承的关系</h6>
<ul>
<li>聚合主要为了快速构建项目</li>
<li>继承主要为了消除重复</li>
</ul>
<hr>
<hr>
<h3 id="heading20">私服</h3>
<h4 id="nexus">Nexus私服安装</h4>
<h6 id="nexuswartomcatwebapps">第一步：下载nexus.war包，然后拷贝到tomcat下的webapps目录中</h6>
<h6 id="tomcat">第二步：启动tomcat</h6>
<h6 id="httplocalhost8080nexus">第三步：访问http://localhost:8080/nexus/显示如下：</h6>
<p><code>图片</code></p>
<h6 id="log-in-usernameadmin-passwordadmin123">第四步：点击右上角“log in”	，输入username：admin 和Password：admin123登录</h6>
<p><code>图片</code></p>
<h6 id="heading21">第五步：登录成功</h6>
<p><code>图片</code></p>
<h6 id="viewsrepositories-repositories">第六步：点击Views/Repositories 中Repositories</h6>
<p><code>图片</code></p>
<h6 id="nexus1">Nexus内置仓库说明：</h6>
<p>（1）Maven Central：该仓库代理Maven中央仓库，其策略为Release，因此只会下载和缓存中央仓库中的发布版本构件。
（2）Releases：这是一种策略为Release的宿主类型仓库，用来部署组织内部的发布版本构件。
（3）Snapshots：这是一个策略为Snapshot的宿主类型仓库，用来部署组织内部的快照版本构件。
（4）3rd party：这是一个策略为Release的宿主类型仓库，用来部署无法从公共仓库获得的第三方发布版本构件。
（5）Public Repositories：该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务。</p>
<h6 id="heading22">第七步：创建宿主目录和代理仓库</h6>
<p>Hosted：本地仓库，通常我们会部署自己的构件到这一类型的仓库。 
o包括3rd party仓库，Releases仓库，Snapshots仓库
Proxy：代理仓库，它们被用来代理远程的公共仓库，如maven中央仓库。 
Group：仓库组，用来合并多个hosted/proxy仓库，通常我们配置maven依赖仓库组。</p>
<h6 id="heading23">第八步：创建仓库组</h6>
<pre><code>点击Public Repositories仓库，在Configurations栏中选取需要合并的仓库,点击箭头加到左边保存即可
</code></pre>
<p><code>图片</code></p>
<h6 id="indexgav">第九步：下载Index索引并进行构建搜索（GAV搜索）</h6>
<h6 id="m2settingxml">第十步：配置所有构建均从私服下载，在~/.m2/setting.xml中配置如下：</h6>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;settings</span><span style="color:#f92672">&gt;</span>
 <span style="color:#f92672">&lt;mirrors</span><span style="color:#f92672">&gt;</span>
	 <span style="color:#f92672">&lt;mirror</span><span style="color:#f92672">&gt;</span>
		 <span style="color:#75715e">&lt;!--</span><span style="color:#75715e">此处配置所有的构建均从私有仓库中下载 *代表所有，也可以写central </span><span style="color:#75715e">--&gt;</span>
		 <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>nexus<span style="color:#f92672">&lt;/id&gt;</span>
		 <span style="color:#f92672">&lt;mirrorOf</span><span style="color:#f92672">&gt;</span>*<span style="color:#f92672">&lt;/mirrorOf&gt;</span>
		 <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://192.168.1.100:8000/nexus/content/groups/public<span style="color:#f92672">&lt;/url&gt;</span>
	 <span style="color:#f92672">&lt;/mirror&gt;</span>
 <span style="color:#f92672">&lt;/mirrors&gt;</span>
 <span style="color:#f92672">&lt;profiles</span><span style="color:#f92672">&gt;</span>
	 <span style="color:#f92672">&lt;profile</span><span style="color:#f92672">&gt;</span>
		 <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>nexus<span style="color:#f92672">&lt;/id&gt;</span>
		 <span style="color:#75715e">&lt;!—所有请求均通过镜像 --&gt;</span>
		 <span style="color:#f92672">&lt;repositories</span><span style="color:#f92672">&gt;</span>
			 <span style="color:#f92672">&lt;repository</span><span style="color:#f92672">&gt;</span>
				 <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>central<span style="color:#f92672">&lt;/id&gt;</span>
				 <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://central<span style="color:#f92672">&lt;/url&gt;</span>
				 <span style="color:#f92672">&lt;releases</span><span style="color:#f92672">&gt;</span><span style="color:#f92672">&lt;enabled</span><span style="color:#f92672">&gt;</span>true<span style="color:#f92672">&lt;/enabled&gt;</span><span style="color:#f92672">&lt;/releases&gt;</span>
			 	 <span style="color:#f92672">&lt;snapshots</span><span style="color:#f92672">&gt;</span><span style="color:#f92672">&lt;enabled</span><span style="color:#f92672">&gt;</span>true<span style="color:#f92672">&lt;/enabled&gt;</span><span style="color:#f92672">&lt;/snapshots&gt;</span>
			 <span style="color:#f92672">&lt;/repository&gt;</span>
		 <span style="color:#f92672">&lt;/repositories&gt;</span>
		 <span style="color:#f92672">&lt;pluginRepositories</span><span style="color:#f92672">&gt;</span>
			 <span style="color:#f92672">&lt;pluginRepository</span><span style="color:#f92672">&gt;</span>
				 <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>central<span style="color:#f92672">&lt;/id&gt;</span>
				 <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://central<span style="color:#f92672">&lt;/url&gt;</span>
				 <span style="color:#f92672">&lt;releases</span><span style="color:#f92672">&gt;</span><span style="color:#f92672">&lt;enabled</span><span style="color:#f92672">&gt;</span>true<span style="color:#f92672">&lt;/enabled&gt;</span><span style="color:#f92672">&lt;/releases&gt;</span>
				 <span style="color:#f92672">&lt;snapshots</span><span style="color:#f92672">&gt;</span><span style="color:#f92672">&lt;enabled</span><span style="color:#f92672">&gt;</span>true<span style="color:#f92672">&lt;/enabled&gt;</span><span style="color:#f92672">&lt;/snapshots&gt;</span>
			 <span style="color:#f92672">&lt;/pluginRepository&gt;</span>
		 <span style="color:#f92672">&lt;/pluginRepositories&gt;</span>
	 <span style="color:#f92672">&lt;/profile&gt;</span>
 <span style="color:#f92672">&lt;/profiles&gt;</span>
<span style="color:#f92672">&lt;activeProfiles</span><span style="color:#f92672">&gt;</span>
 <span style="color:#75715e">&lt;!--</span><span style="color:#75715e">make the profile active all the time </span><span style="color:#75715e">--&gt;</span>
 <span style="color:#f92672">&lt;activeProfile</span><span style="color:#f92672">&gt;</span>nexus<span style="color:#f92672">&lt;/activeProfile&gt;</span>
 <span style="color:#f92672">&lt;/activeProfiles&gt;</span>
</code></pre></div><h6 id="nexusreleasesnapshot-pomxml">第十一步：部署构建到Nexus，包含Release和Snapshot， 在项目根目录中pom.xml中配置：</h6>
<p>发布到私服配置，没有此配置发布失败。</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;distributionManagement</span><span style="color:#f92672">&gt;</span> 
	<span style="color:#f92672">&lt;repository</span><span style="color:#f92672">&gt;</span> 
	    <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>releases<span style="color:#f92672">&lt;/id&gt;</span> 
	    <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>Internal Releases<span style="color:#f92672">&lt;/name&gt;</span> 
	    <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://localhost:8000/nexus/content/repositories/releases/<span style="color:#f92672">&lt;/url&gt;</span> 
	<span style="color:#f92672">&lt;/repository&gt;</span> 
	<span style="color:#f92672">&lt;snapshotRepository</span><span style="color:#f92672">&gt;</span> 
	    <span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span>snapshots<span style="color:#f92672">&lt;/id&gt;</span> 
	    <span style="color:#f92672">&lt;name</span><span style="color:#f92672">&gt;</span>Internal Snapshots<span style="color:#f92672">&lt;/name&gt;</span> 
	    <span style="color:#f92672">&lt;url</span><span style="color:#f92672">&gt;</span>http://localhost:8000/nexus/content/repositories/snapshots/<span style="color:#f92672">&lt;/url&gt;</span> 
	<span style="color:#f92672">&lt;/snapshotRepository&gt;</span> 
  <span style="color:#f92672">&lt;/distributionManagement&gt;</span>
</code></pre></div><h6 id="nexusm2settingxml">第十二步：Nexus的访问权限控制，在~/m2/setting.xml中配置如下：</h6>
<!-- raw HTML omitted -->
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"> <span style="color:#f92672">&lt;servers</span><span style="color:#f92672">&gt;</span>
 	<span style="color:#f92672">&lt;server</span><span style="color:#f92672">&gt;</span>
 		<span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span> releases <span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username</span><span style="color:#f92672">&gt;</span>admin<span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password</span><span style="color:#f92672">&gt;</span>admin123<span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&lt;server</span><span style="color:#f92672">&gt;</span>
<span style="color:#f92672">&lt;id</span><span style="color:#f92672">&gt;</span> snapshots <span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username</span><span style="color:#f92672">&gt;</span>admin<span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password</span><span style="color:#f92672">&gt;</span>admin123<span style="color:#f92672">&lt;/password&gt;</span>
 <span style="color:#f92672">&lt;/server&gt;</span>
 <span style="color:#f92672">&lt;/servers&gt;</span>
</code></pre></div><h6 id="heading24">私服使用命令</h6>
<p>maven install 安装到本地
上传私服   maven build ..&ndash;&gt;clean deploy
maven build ..&ndash;&gt; deploy -x  查看失败原因</p>
<hr>
<p>Exlipse Maven 使用</p>
<hr>
<p>run as&ndash;&gt;Maven build&hellip;
Goals: clean install 将工程发布到本地仓库；
Goals: compile 将工程发布到本地仓库；</p>
<h5 id="web">web项目创建</h5>
<p>选 maven-archetype-webapp</p>
<h6 id="pomxml">pom.xml发布名称设置</h6>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;build</span><span style="color:#f92672">&gt;</span>
		<span style="color:#f92672">&lt;finalName</span><span style="color:#f92672">&gt;</span>发布名称<span style="color:#f92672">&lt;/finalName&gt;</span>
<span style="color:#f92672">&lt;/build&gt;</span>
</code></pre></div><h5 id="maven41">maven提供的41个骨架原型分别是：</h5>
<p>1: appfuse-basic-jsf (创建一个基于Hibernate，Spring和JSF的Web应用程序的原型) 
2: appfuse-basic-spring(创建一个基于Hibernate，Spring和Spring MVC的Web应用程序的原型) 
3: appfuse-basic-struts(创建一个基于Hibernate，Spring和Struts 2的Web应用程序的原型) 
4: appfuse-basic-tapestry(创建一个基于Hibernate，Spring 和 Tapestry 4的Web应用程序的原型) 
5: appfuse-core(创建一个基于Hibernate，Spring 和 XFire的jar应用程序的原型) 
6: appfuse-modular-jsf(创建一个基于Hibernate，Spring和JSF的模块化应用原型) 
7: appfuse-modular-spring(创建一个基于Hibernate, Spring 和 Spring MVC 的模块化应用原型) 
8: appfuse-modular-struts(创建一个基于Hibernate, Spring 和 Struts 2 的模块化应用原型) 
9: appfuse-modular-tapestry (创建一个基于 Hibernate, Spring 和 Tapestry 4 的模块化应用原型) 
10: maven-archetype-j2ee-simple(一个简单的J2EE的Java应用程序) 
11: maven-archetype-marmalade-mojo(一个Maven的 插件开发项目 using marmalade) 
12: maven-archetype-mojo(一个Maven的Java插件开发项目) 
13: maven-archetype-portlet(一个简单的portlet应用程序) 
14: maven-archetype-profiles() 
15:maven-archetype-quickstart() 
16: maven-archetype-site-simple(简单的网站生成项目) 
17: maven-archetype-site(更复杂的网站项目) 
18:maven-archetype-webapp(一个简单的Java Web应用程序) 
19: jini-service-archetype(Archetype for Jini service project creation) 
20: softeu-archetype-seam(JSF+Facelets+Seam Archetype) 
21: softeu-archetype-seam-simple(JSF+Facelets+Seam (无残留) 原型) 
22: softeu-archetype-jsf(JSF+Facelets 原型) 
23: jpa-maven-archetype(JPA 应用程序) 
24: spring-osgi-bundle-archetype(Spring-OSGi 原型) 
25: confluence-plugin-archetype(Atlassian 聚合插件原型) 
26: jira-plugin-archetype(Atlassian JIRA 插件原型) 
27: maven-archetype-har(Hibernate 存档) 
28: maven-archetype-sar(JBoss 服务存档) 
29: wicket-archetype-quickstart(一个简单的Apache Wicket的项目) 
30: scala-archetype-simple(一个简单的scala的项目) 
31: lift-archetype-blank(一个 blank/empty liftweb 项目) 
32: lift-archetype-basic(基本（liftweb）项目) 
33: cocoon-22-archetype-block-plain([http://cocoapacorg2/maven-plugins/]) 
34: cocoon-22-archetype-block([http://cocoapacorg2/maven-plugins/]) 
35:cocoon-22-archetype-webapp([http://cocoapacorg2/maven-plugins/]) 
36: myfaces-archetype-helloworld(使用MyFaces的一个简单的原型) 
37: myfaces-archetype-helloworld-facelets(一个使用MyFaces和Facelets的简单原型) 
38: myfaces-archetype-trinidad(一个使用MyFaces和Trinidad的简单原型) 
39: myfaces-archetype-jsfcomponents(一种使用MyFaces创建定制JSF组件的简单的原型) 
40: gmaven-archetype-basic(Groovy的基本原型) 
41: gmaven-archetype-mojo(Groovy mojo 原型)</p>

</div>


  
</article>
      <footer id="main-footer" class="container main_footer">
  

  <div class="container nav foot no-print">
  
<a href="https://lvzongcheng.gitee.io/license">license</a>


  <a class="toplink" href="#">back to top</a>

</div>

  <div class="container credits">
  
<div class="container footline">
  
  code with <!-- raw HTML omitted --><!-- raw HTML omitted -->


</div>


  
<div class="container copyright">
  
  (c) 2015 yourname.


</div>


</div>

</footer>

    </main>
    
<script type="text/javascript">
  (function() {
    
    
    if (window.location.hostname == "localhost")
      return;
    var dsq = document.createElement('script'); dsq.async = true; dsq.type = 'text/javascript';
    dsq.src = '//your_disqus_shortname.disqus.com/count.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>



<script src="/js/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



    
  </body>
</html>

